antd 中 Upload 上传图片宽高限制以及上传文件的格式限制

一、上传图片的宽高限制
在组件Upload中有一个beforeUpload的API,是文件上传之前的钩子函数,我们需要在这个API中做限制

 
 beforeUpload: file => {
	  this.handleFilebeforeUpload(file)
	     .then(() => {
	       message.success(`上传成功`);
	     })
	     .catch(() => {
	       Modal.error({
	         title: "上传图片的宽高不符合要求,请重传!(宽高不得超过1500)"
	       });
	     });
 },
 
handleFilebeforeUpload = file => this.checkImageWH(file, 1500, 1500);

 // 上传图片尺寸限制
checkImageWH(file, width, height) { // 参数分别是上传的file,想要限制的宽,想要限制的高
    return new Promise(function(resolve, reject) {
      let filereader = new FileReader();
      filereader.onload = e => {
        let src = e.target.result;
        const image = new Image();
        image.onload = function() {
          if (this.width >= width && this.height >= height) { // 上传图片的宽高与传递过来的限制宽高作比较,超过限制则调用失败回调
            reject();
          } else {
            resolve();
          }
        };
        image.onerror = reject;
        image.src = src;
      };
      filereader.readAsDataURL(file);
    });
  }

二 、上传文件的格式限制,
在组件Upload中上传文件的格式限制有两种方法

  1. API : accept
    接收类型字符串,将想要接收的类型拼接字符串并使用英文逗号隔开
 accept: ".bmp,.gif,.png,.jpeg,.jpg",
  1. 与上文限制图片宽高类似,在API beforeUpload中做验证
 beforeUpload: file => {
    if (file.type !== "image/png" && file.type !== "image/jpeg") {
      message.error("仅支持上传jpg/png格式的文件");
     }
    return file.type === "image/png" || file.type === "image/jpeg";
}

可以使用antd Upload Dragger组件的beforeUpload属性和antdUpload组件的transformFile属性来限制图片的宽高。 具体实现方法如下: 1. 在beforeUpload属性获取图片信息,包括图片的宽高等信息。 2. 判断图片的宽高是否符合要求,如果符合要求则返回true,否则返回一个错误信息。 3. 在transformFile属性使用canvas对图片进行压缩,可以指定压缩后的宽高,达到限制图片宽高的效果。 示例代码如下: ```jsx import { Upload, message } from 'antd'; function beforeUpload(file) { // 获取图片信息 const img = new Image(); img.src = window.URL.createObjectURL(file); return new Promise((resolve, reject) => { img.onload = function () { const { width, height } = img; // 判断图片宽高是否符合要求 if (width <= 100 && height <= 100) { resolve(true); } else { message.error('图片宽高不能超过100px'); reject(false); } }; }); } function transformFile(file) { return new Promise((resolve) => { const img = new Image(); img.src = window.URL.createObjectURL(file); img.onload = function () { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = 100; canvas.height = 100; ctx.drawImage(img, 0, 0, 100, 100); canvas.toBlob((blob) => { resolve(new File([blob], file.name, { type: file.type })); }, file.type); }; }); } function App() { return ( <Upload.Dragger beforeUpload={beforeUpload} transformFile={transformFile} > <p className="ant-upload-drag-icon"> <InboxOutlined /> </p> <p className="ant-upload-text">点击或将文件拖拽到这里上传</p> </Upload.Dragger> ); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值